/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package DAO;

import controller.Conexao;
import controller.Pedido;
import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JOptionPane;

/**
 *
 * @author Alcivando
 */
public class PedidoDAO {
Pedido pedido = new Pedido();
    private Connection connection;
    private Conexao conexao;

    public PedidoDAO() throws SQLException {
        this.connection = conexao.getConnection();

    }

    public void adiciona(Pedido pedido) throws SQLException {

        // cria uma lista onde será armazenado o próximo codigo
        List<Integer> codigo = new ArrayList<Integer>();
        // cria um parametro com a consulta para pegar o proximo codigo a ser usado
        String consultaId = "SELECT max(\"codPedido\") + 1 from pedido;";
        // efetua e retorna a consultaId
        ResultSet rs = connection.createStatement().executeQuery(consultaId);
        //adiciona o codigo a lista
        while (rs.next()) {
            codigo.add(rs.getInt("?column?"));
        }
        //adiciona o codigo ao proximo cliente a ser inserido
        pedido.setCodPedido(codigo.get(0));

        // insere os dados do cliente com a conexao para o banco de dados.
        String sql = "insert into pedido values (?,?,?,?)";
        PreparedStatement stmt = connection.prepareStatement(sql);

        stmt.setInt(1, pedido.getCodPedido());
        stmt.setInt(2, pedido.getCodFornecedor());
        stmt.setInt(3, pedido.getCodCompra());
        stmt.setDate(4, (Date) pedido.getData());

        // busca os campos preenchidos na classe de Clientes.

        stmt.execute();
        JOptionPane.showMessageDialog(null, "Salvo com sucesso!", "Cadastro Concluído", 1);
        stmt.close();
        // executa e finaliza o processo de adicionar.*/
    }

    public ArrayList<Pedido> RetornaTodosPedidos() {
        PreparedStatement comando;
        ArrayList<Pedido> listaPedido = new ArrayList<Pedido>();

        try {

            String sql = "SELECT * FROM pedido";
            comando = connection.prepareStatement(sql);
            ResultSet rs = comando.executeQuery(sql);

            while (rs.next()) {

                Pedido pedido = new Pedido();

                pedido.setCodPedido(rs.getInt("codPedido"));
                pedido.setCodFornecedor(rs.getInt("codFornecedor"));
                pedido.setCodCompra(rs.getInt("codCompra"));
                pedido.setData(rs.getDate("data"));


                listaPedido.add(pedido);

            }
            comando.close();

            return listaPedido;

        } catch (SQLException ex) {
            ex.printStackTrace();
            return null;
        }
    }


    public void remover(Pedido pedido) throws SQLException {
        PreparedStatement comando;
        try {
            String sql = "DELETE FROM pedido WHERE codPedido=?";
            comando = connection.prepareStatement(sql);
            comando.setInt(1, pedido.getCodPedido());
            comando.execute();
            JOptionPane.showMessageDialog(null, "Removido com sucesso!", "Remorcao Concluída", 1);
            comando.close();
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
    }

    public void atualizar(Pedido pedido) {
        PreparedStatement comando;
        try {

            String sql = "UPDATE pedido SET codPedido = ?, codFornecedor = ?, codCompra  = ?, data = ?;";

            comando = connection.prepareStatement(sql);
            comando.setInt(1, pedido.getCodPedido());
            comando.setInt(2, pedido.getCodFornecedor());
            comando.setInt(3, pedido.getCodCompra());
            comando.setDate(4, (Date) pedido.getData());

            comando.executeUpdate();
JOptionPane.showMessageDialog(null, "Alterado com sucesso!", "Alteracao Concluída", 1);
            comando.close();
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
    }

    public ArrayList<Pedido> retornaPedidoPorNome(String nome) {
        PreparedStatement comando;
        ArrayList<Pedido> listaPedido = new ArrayList<Pedido>();

        try {
            String sql = "SELECT * FROM pedido WHERE nome LIKE ?";
            comando = connection.prepareStatement(sql);
            comando.setString(1, nome + "%");
            ResultSet rs = comando.executeQuery(); //associado as operações de insert,delete,update.

            while (rs.next()) {
                Pedido pedido = new Pedido();

                pedido.setCodPedido(rs.getInt("codPedido"));
                pedido.setCodFornecedor(rs.getInt("codFornecedor"));
                pedido.setCodCompra(rs.getInt("codCompra"));
                pedido.setData(rs.getDate("data"));


            }

            comando.close();
            return listaPedido;
        } catch (Exception sqle) {
            sqle.printStackTrace();
            return null;
        }
    }
}
